iT邦幫忙

2024 iThome 鐵人賽

DAY 10
1

前言

在 Kubernetes 中,NetworkPolicy 和 Namespace 是兩個關鍵概念,它們共同作用以實現集群內的網絡隔離與安全管理。NetworkPolicy 讓你能夠控制 Pod 間的網絡通信,而 Namespace 則提供了邏輯上的隔離,幫助你將資源分組管理。在這篇文章中,我們將深入探討這兩者的工作原理,並展示如何在實際應用中結合使用它們來提高集群的安全性和管理效率。

什麼是 Namespace?

Namespace 是 Kubernetes 中的一種虛擬集群技術,它允許你將集群內的資源按邏輯分組,從而實現資源的隔離和管理。每個 Namespace 內的資源相互隔離,這意味著同名的資源可以在不同的 Namespace 中共存,而不會發生衝突。

  • 資源隔離:

    Namespace 將集群內的資源邏輯上隔離開來,這在多租戶環境或不同環境(如開發、測試、生產)之間尤為重要。每個 Namespace 內的資源,如 Pod、Service、ConfigMap 等,都是獨立管理的。

  • 名稱空間隔離:

    Namespace 的存在允許在不同的命名空間中使用相同的資源名稱,而不會產生衝突。例如,你可以在 "dev" 和 "prod" 這兩個 Namespace 中各自運行一個名為 "web-app" 的 Deployment。

  • 資源配額管理:

    你可以為每個 Namespace 設置資源配額(Resource Quotas),以限制該命名空間內的資源使用量。這有助於防止單個應用或租戶佔用過多的集群資源。

Namespace 使用場景:

  • 多租戶環境:

    在多租戶環境中,每個客戶或團隊可以被分配到一個專屬的 Namespace,確保他們的資源和其他租戶的資源相互隔離。

  • 環境隔離:

    在不同的環境中(如開發、測試、生產),使用不同的 Namespace 可以防止配置混亂和環境間的相互影響。

什麼是 NetworkPolicy?

NetworkPolicy 是 Kubernetes 中的一種網絡安全策略,它定義了 Pod 間的網絡通信規則。通過 NetworkPolicy,你可以控制哪些 Pod 可以相互通信,以及哪些外部流量可以訪問你的 Pod。

  • 細粒度的網絡控制:

    NetworkPolicy 允許你在非常細粒度的層面上控制 Pod 之間的網絡通信。例如,你可以指定只有具有特定標籤的 Pod 才能訪問其他 Pod,或是限制某些端口的外部流量。

  • 安全隔離:

    通過 NetworkPolicy,你可以實現不同應用之間的網絡隔離,防止未經授權的訪問,從而提高整個集群的安全性。

  • 適用於 Namespace:

    NetworkPolicy 通常與 Namespace 結合使用,以實現更精細的網絡隔離。例如,你可以在某個 Namespace 中定義 NetworkPolicy 來限制該命名空間內的 Pod 之間的通信

https://ithelp.ithome.com.tw/upload/images/20240908/201408743gkauQanur.png

  • NetworkPolicy 的 YAML 配置範例

    apiVersion: networking.k8s.io/v1  
    kind: NetworkPolicy               
    metadata:
      name: allow-specific-traffic    # 給這個 NetworkPolicy 取一個名
      namespace: dev                  # 指定這個 NetworkPolicyNamespace
    spec:
      podSelector:                    # 定義此 NetworkPolicy 針對的 Pod 範圍
        matchLabels:
          role: backend               # 只針對標籤為 "role=backend" 的 Pod 應用此策略
      policyTypes:
      - Ingress                       # 指定該 NetworkPolicy 的類型為 Ingress,表示控制進入這些 Pod 的流量
      ingress:
      - from:                         # 定義允許哪些流量進入這些 Pod
        - podSelector:                # 允許來自特定 Pod 的流量
            matchLabels:
              role: frontend          # 允許來自標籤為 "role=frontend" 的 Pod 的流量
        ports:                        # 指定允許進入的端口
        - protocol: TCP               # 指定允許的協議為 TCP
          port: 8080                  # 指定允許的端口號為 8080
    

◆ 每日咒術小知識

https://ithelp.ithome.com.tw/upload/images/20240908/20140874CJZ5vcyIy7.png

參考資料

https://kubernetes.io/docs/concepts/services-networking/network-policies/

https://godleon.github.io/blog/Kubernetes/k8s-Network-Policy-Overview/

https://earthly.dev/blog/kubernetes-network-policies/


上一篇
第九篇: Deployment 與 ReplicaSet
下一篇
第十一篇: RAG 基本概念
系列文
成為 Kubernetes 特級咒術師的 30 天修行26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言